<html>
    <head>
        <title>对象映射</title>
    </head>
    <body>
        <script>
            /*
                        四、对象映射

                                假设你向可扩展实体对象添加了一个额外属性，并使用"自动对象映射"，将该实体映射到可扩展DTO类中。
                                在这种情况下，你需要小心了，因为额外属性可能包含客户端不可用的敏感数据。

                                本节提供了一些良好实践来控制对象映射上的额外属性。


                                1、MapExtraPropertiesTo() 方法
                                        MapExtraPropertiesTo() 是ABP提供的一个扩展方法，用于"以受控的方式"将额外属性从一个对象复制到另一个对象。
                                        
                                        eg:

                                            identityUser.MapExtraPropertiesTo(identityUserDto);

                                        MapExtraPropertiesTo需要在两边中定义属性（如上所述）（在本例中为IdentityUser和IdentityUserDto）,以便将值复制到目标对象。
                                        否则，即使对象中确实存在改制，它也不贵复制该值。

                                        有一些方法可以重载此限制：

                                               ①、MappingPropertyDefinitionChecks    
                                               
                                                        MapExtraPropertiesTo获取一个附加参数来控制单个映射操作的定义检查：

                                                            identityUser.MapExtraPropertiesTo(
                                                                        identityUserDto,
                                                                        MappingPropertyDefinitionChecks.None
                                                                    );
                                                    要小心，因为MappingPropertyDefinitionChecks.None没有任何检查就复制所有额外的属性。
                                                    MappingPropertyDefinitionChecks枚举也有其他成员。

                                                    如果要完全禁用属性的定义检查，可以在定义额外属性（或更新现有定义）时执行，如下所示：
                                                           ObjectExtensionManager.Instance
                                                                                .AddOrUpdateProperty<IdentityUser, string>(
                                                                                    "SocialSecurityNumber",
                                                                                    options =>
                                                                                    {
                                                                                        options.CheckPairDefinitionOnMapping = false;
                                                                                    });

                                               ②、忽略某属性的映射
                                                    你可能希望忽略特定映射操作的某些属性：
                                                         identityUser.MapExtraPropertiesTo(
                                                                    identityUserDto,
                                                                    ignoredProperties: new[] {"MySensitiveProp"}
                                                                );
                                                    忽略的属性不会复制到目标对象。

                                               ③、集成AutoMapper
                                                    如果你使用的是AutoMapper库，ABP还提供了一个扩展方法来利用上面定义的MapExtraPropertiesTo方法。
                                                    你可以在映射配置文件中使用MapExtraProperties()方法。
                                                        public class MyProfile : Profile
                                                        {
                                                            public MyProfile()
                                                            {
                                                                CreateMap<IdentityUser, IdentityUserDto>()
                                                                    .MapExtraProperties();
                                                            }
                                                        }

                                                    它具有与MapExtraPropertiesTo方法相同的参数。
                    */
        </script>
    </body>
</html>